{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "import tensorflow.keras as K\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(11)\n",
    "tf.random.set_seed(11)\n",
    "batch_size = 256\n",
    "max_epochs = 50\n",
    "learning_rate = 1e-3\n",
    "momentum = 8e-1\n",
    "hidden_dim = 128\n",
    "original_dim = 784"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "(x_train, _), (x_test, _) = K.datasets.mnist.load_data()\n",
    "\n",
    "x_train = x_train / 255.\n",
    "x_test = x_test / 255.\n",
    "\n",
    "x_train = x_train.astype(np.float32)\n",
    "x_test = x_test.astype(np.float32)\n",
    "\n",
    "x_train = np.reshape(x_train, (x_train.shape[0], 784))\n",
    "x_test = np.reshape(x_test, (x_test.shape[0], 784))\n",
    "\n",
    "# Generate corrupted MNIST images by adding noise with normal dist\n",
    "# centered at 0.5 and std=0.5\n",
    "noise = np.random.normal(loc=0.5, scale=0.5, size=x_train.shape)\n",
    "x_train_noisy = x_train + noise\n",
    "noise = np.random.normal(loc=0.5, scale=0.5, size=x_test.shape)\n",
    "x_test_noisy = x_test + noise\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "class Encoder(K.layers.Layer):\n",
    "    def __init__(self, hidden_dim):\n",
    "        super(Encoder, self).__init__()\n",
    "        self.hidden_layer = K.layers.Dense(units=hidden_dim, activation=tf.nn.relu)\n",
    "        \n",
    "    \n",
    "    def call(self, input_features):\n",
    "        activation = self.hidden_layer(input_features)\n",
    "        return activation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "class Decoder(K.layers.Layer):\n",
    "    def __init__(self, hidden_dim, original_dim):\n",
    "        super(Decoder, self).__init__()\n",
    "        self.output_layer = K.layers.Dense(units=original_dim, activation=tf.nn.relu)\n",
    "  \n",
    "    def call(self, encoded):\n",
    "        activation = self.output_layer(encoded)\n",
    "        return activation "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Autoencoder(K.Model):\n",
    "    def __init__(self, hidden_dim, original_dim):\n",
    "        super(Autoencoder, self).__init__()\n",
    "        self.loss = []\n",
    "        self.encoder = Encoder(hidden_dim=hidden_dim)\n",
    "        self.decoder = Decoder(hidden_dim=hidden_dim, original_dim=original_dim)\n",
    "\n",
    "    def call(self, input_features):\n",
    "        encoded = self.encoder(input_features)\n",
    "        reconstructed = self.decoder(encoded)\n",
    "        return reconstructed"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 60000 samples, validate on 10000 samples\n",
      "Epoch 1/50\n",
      "60000/60000 [==============================] - 1s 16us/sample - loss: 0.0526 - val_loss: 0.0356\n",
      "Epoch 2/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0322 - val_loss: 0.0293\n",
      "Epoch 3/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0285 - val_loss: 0.0273\n",
      "Epoch 4/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0275 - val_loss: 0.0268\n",
      "Epoch 5/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0269 - val_loss: 0.0263\n",
      "Epoch 6/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0264 - val_loss: 0.0259\n",
      "Epoch 7/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0261 - val_loss: 0.0257\n",
      "Epoch 8/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0260 - val_loss: 0.0256\n",
      "Epoch 9/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0257 - val_loss: 0.0252\n",
      "Epoch 10/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0255 - val_loss: 0.0252\n",
      "Epoch 11/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0254 - val_loss: 0.0252\n",
      "Epoch 12/50\n",
      "60000/60000 [==============================] - 1s 12us/sample - loss: 0.0254 - val_loss: 0.0251\n",
      "Epoch 13/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0253 - val_loss: 0.0248\n",
      "Epoch 14/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0251 - val_loss: 0.0246\n",
      "Epoch 15/50\n",
      "60000/60000 [==============================] - 1s 12us/sample - loss: 0.0246 - val_loss: 0.0241\n",
      "Epoch 16/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0241 - val_loss: 0.0236\n",
      "Epoch 17/50\n",
      "60000/60000 [==============================] - 1s 12us/sample - loss: 0.0236 - val_loss: 0.0231\n",
      "Epoch 18/50\n",
      "60000/60000 [==============================] - 1s 12us/sample - loss: 0.0233 - val_loss: 0.0230\n",
      "Epoch 19/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0232 - val_loss: 0.0228\n",
      "Epoch 20/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0232 - val_loss: 0.0229\n",
      "Epoch 21/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0231 - val_loss: 0.0228\n",
      "Epoch 22/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0231 - val_loss: 0.0228\n",
      "Epoch 23/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0230 - val_loss: 0.0227\n",
      "Epoch 24/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0229 - val_loss: 0.0226\n",
      "Epoch 25/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0229 - val_loss: 0.0226\n",
      "Epoch 26/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0228 - val_loss: 0.0226\n",
      "Epoch 27/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0227 - val_loss: 0.0225\n",
      "Epoch 28/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0226 - val_loss: 0.0224\n",
      "Epoch 29/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0225 - val_loss: 0.0223\n",
      "Epoch 30/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0224 - val_loss: 0.0223\n",
      "Epoch 31/50\n",
      "60000/60000 [==============================] - 1s 12us/sample - loss: 0.0224 - val_loss: 0.0221\n",
      "Epoch 32/50\n",
      "60000/60000 [==============================] - 1s 12us/sample - loss: 0.0223 - val_loss: 0.0221\n",
      "Epoch 33/50\n",
      "60000/60000 [==============================] - 1s 12us/sample - loss: 0.0223 - val_loss: 0.0221\n",
      "Epoch 34/50\n",
      "60000/60000 [==============================] - 1s 12us/sample - loss: 0.0223 - val_loss: 0.0221\n",
      "Epoch 35/50\n",
      "60000/60000 [==============================] - 1s 12us/sample - loss: 0.0223 - val_loss: 0.0221\n",
      "Epoch 36/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0222 - val_loss: 0.0220\n",
      "Epoch 37/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0220 - val_loss: 0.0218\n",
      "Epoch 38/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0219 - val_loss: 0.0218\n",
      "Epoch 39/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0219 - val_loss: 0.0218\n",
      "Epoch 40/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0219 - val_loss: 0.0217\n",
      "Epoch 41/50\n",
      "60000/60000 [==============================] - 1s 12us/sample - loss: 0.0219 - val_loss: 0.0218\n",
      "Epoch 42/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0219 - val_loss: 0.0217\n",
      "Epoch 43/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0219 - val_loss: 0.0217\n",
      "Epoch 44/50\n",
      "60000/60000 [==============================] - 1s 12us/sample - loss: 0.0219 - val_loss: 0.0218\n",
      "Epoch 45/50\n",
      "60000/60000 [==============================] - 1s 12us/sample - loss: 0.0219 - val_loss: 0.0218\n",
      "Epoch 46/50\n",
      "60000/60000 [==============================] - 1s 12us/sample - loss: 0.0219 - val_loss: 0.0218\n",
      "Epoch 47/50\n",
      "60000/60000 [==============================] - 1s 11us/sample - loss: 0.0219 - val_loss: 0.0218\n",
      "Epoch 48/50\n",
      "60000/60000 [==============================] - 1s 12us/sample - loss: 0.0219 - val_loss: 0.0217\n",
      "Epoch 49/50\n",
      "60000/60000 [==============================] - 1s 12us/sample - loss: 0.0219 - val_loss: 0.0217\n",
      "Epoch 50/50\n",
      "60000/60000 [==============================] - 1s 12us/sample - loss: 0.0219 - val_loss: 0.0216\n"
     ]
    }
   ],
   "source": [
    "model = Autoencoder(hidden_dim=hidden_dim, original_dim=original_dim)\n",
    "\n",
    "model.compile(loss='mse', optimizer='adam')\n",
    "\n",
    "loss = model.fit(x_train_noisy,\n",
    "                x_train,\n",
    "                validation_data=(x_test_noisy, x_test),\n",
    "                epochs=max_epochs,\n",
    "                batch_size=batch_size)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "plt.plot(range(max_epochs), loss.history['loss'])\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Loss')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1440x288 with 20 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "number = 10  # how many digits we will display\n",
    "plt.figure(figsize=(20, 4))\n",
    "for index in range(number):\n",
    "    # display original\n",
    "    ax = plt.subplot(2, number, index + 1)\n",
    "    plt.imshow(x_test_noisy[index].reshape(28, 28), cmap='gray')\n",
    "    ax.get_xaxis().set_visible(False)\n",
    "    ax.get_yaxis().set_visible(False)\n",
    "\n",
    "    # display reconstruction\n",
    "    ax = plt.subplot(2, number, index + 1 + number)\n",
    "    plt.imshow(model(x_test_noisy)[index].numpy().reshape(28, 28), cmap='gray')\n",
    "    ax.get_xaxis().set_visible(False)\n",
    "    ax.get_yaxis().set_visible(False)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:tf2p0alpha]",
   "language": "python",
   "name": "conda-env-tf2p0alpha-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
